Medium 清新閱讀版
:連結
前一天我們實作了第一個測試,我們學到了第一個 Assert 函數 assertEquals
。
今天讓我們來了解其他常用的 Assert 函數吧!
函數簽名:assertEmpty(mixed $actual[, string $message = ''])
函數說明: 從字面上來解釋,這個函數是用來判斷第1個輸入參數 $actual
是否為 Empty
,PHP常見空值可參考PHP官方函數 empty() 的說明。
實作範例:
/**
* Example for assertEmpty()
* @return void
*/
public function testAssertEmpty()
{
// 七種「空」值
$emptyArray = [];
$emptyString = '';
$null = null;
$zeroInt = 0;
$zeroFloat = 0.0;
$zeroIntString = '0';
$false = FALSE;
// 以下各 Assertion 皆會通過測試
$this->assertEmpty($emptyArray);
$this->assertEmpty($emptyString);
$this->assertEmpty($null);
$this->assertEmpty($zeroInt);
$this->assertEmpty($zeroFloat);
$this->assertEmpty($zeroIntString);
$this->assertEmpty($false);
}
要特別注意的是, "0"
會被認定為空值,但 "0.0"
卻不會,這點要小心。
函數簽名: assertEquals(mixed $expected, mixed $actual[, string $message = ''])
函數說明: 此函數可用以判斷,第1個參數 $expected
與第2個參數 $actual
,兩者之值是否相等。
實作範例:
/**
* Example for assertEquals()
* @return void
*/
public function testAssertEquals()
{
// 範例值
$string = 'string';
$intOne = 1;
$intZero = 0;
$floatOne = 1.0;
$floatZero = 0.0;
$array1 = [];
$array2 = ['string'];
$stdClass1 = new \stdClass();
$stdClass1->a_field = 'a';
$stdClass2 = new \stdClass();
$stdClass2->a_field = 'a';
// 以下各 Assertion 皆會通過測試
$this->assertEquals('string', $string);
$this->assertEquals(1, $intOne);
$this->assertEquals(0, $intZero);
$this->assertEquals(1.0, $floatOne);
$this->assertEquals(0.0, $floatZero);
$this->assertEquals([], $array1);
$this->assertEquals(['string'], $array2);
$this->assertEquals($stdClass1, $stdClass2);
// 以下為非相同資料型態,但會判定為相等的情況
$this->assertEquals($intOne, $floatOne);
$this->assertEquals($intZero, $floatZero);
}
要特別注意的是,$intOne
會被認定為與 $floatOne
相等,$intZero
與 $floatZero
也是。
函數簽名:assertSame(mixed $expected, mixed $actual[, string $message = ''])
函數說明: 此函數可用以判斷,第1個參數 $expected
與第2個參數 $actual
,兩者之資料型態與值是否相等。
實作範例:
/**
* Example for assertSame()
* @return void
*/
public function testAssertSame()
{
// 範例值
$string = 'string';
$intOne = 1;
$intZero = 0;
$floatOne = 1.0;
$floatZero = 0.0;
$array1 = [];
$array2 = ['string'];
// 範例物件
$stdClass1 = new \stdClass();
$stdClass1->a_field = 'a';
$stdClass2 = new \stdClass();
$stdClass2->a_field = 'a';
$stdClass3 = $stdClass2;
// 以下各 Assertion 皆會通過測試
$this->assertSame('string', $string);
$this->assertSame(1, $intOne);
$this->assertSame(0, $intZero);
$this->assertSame(1.0, $floatOne);
$this->assertSame(0.0, $floatZero);
$this->assertSame([], $array1);
$this->assertSame(['string'], $array2);
// 以下 Assertion 會通過測試,因兩者指向相同的物件參考位置
$this->assertSame($stdClass3, $stdClass2);
// 以下為非相同資料型態,但會判定為相等的情況
$this->assertSame($intOne, $floatOne);
$this->assertSame($intZero, $floatZero);
// 以下 Assertion 將會不通過測試,因兩者所指向之物件參考位置不同
$this->assertSame($stdClass1, $stdClass2);
}
值得一提的是,與 assertEquals()
相同的是,$intOne
會被認定為與 $floatOne
相等,$intZero
與 $floatZero
也是;與 assertEquals()
不同的是,它會認定2個擁有相同屬性結構的類別變數是 不同
的。
函數簽名: assertTrue(bool $condition[, string $message = ''])
函數說明: 此函數可用以判斷,第1個參數是否為 TRUE
。
實作範例:
/**
* Example for assertTrue()
* @return void
*/
public function testAssertTrue()
{
$notEmptyString = 'a';
$notZeroInt = 1;
$notZeroFloat = 0.1;
$stdClass = new \stdClass();
$true = TRUE;
// 以下各 Assertion 皆會通過測試
$this->assertTrue(true);
$this->assertTrue($true);
$this->assertTrue(1 == 1);
$this->assertTrue(1 === 1);
$this->assertTrue($true);
// 以下 Assertion 將會不通過測試
$this->assertTrue($notEmptyString);
$this->assertTrue($notZeroInt);
$this->assertTrue($notZeroFloat);
$this->assertTrue($stdClass);
}
特別注意,assertTrue
的第1個參數之資料型態必須是bool
,代入字串或其他資料型態都會不通過。
函數簽名:assertFalse(bool $condition[, string $message = ''])
函數說明: 與 assertTrue
相對,此函數可用以判斷,第1個參數是否為 FALSE
。
實作範例:
/**
* Example for assertFalse()
* @return void
*/
public function testAssertFalse()
{
$notEmptyString = 'a';
$notZeroInt = 1;
$zeroInt = 0;
$notZeroFloat = 0.1;
$zeroFloat = 0.0;
$stdClass = new \stdClass();
$false = FALSE;
// 以下各 Assertion 皆會通過測試
$this->assertFalse(false);
$this->assertFalse($false);
$this->assertFalse(1 > 1);
$this->assertFalse(1 < 1);
$this->assertFalse(1 != 1);
// 以下 Assertion 將會不通過測試
$this->assertFalse($notEmptyString);
$this->assertFalse($notZeroInt);
$this->assertFalse($zeroInt);
$this->assertFalse($notZeroFloat);
$this->assertFalse($zeroFloat);
$this->assertFalse($stdClass);
}
同樣要注意,assertFalse
的第1個參數之資料型態必須是bool
,代入字串或其他資料型態都會不通過。
函數簽名:assertIsArray($actual[, $message = ''])
函數說明: 顧名思義,此函數可用來判斷第1個參數是否為 Array
型態。
實作範例:
/**
* Example for assertIsArraye()
* @return void
*/
public function testAssertIsArray()
{
$array1 = [];
$array2 = ['2'];
$array3 = ['key' => 'value'];
$collection = collect([]);
// 以下各 Assertion 皆會通過測試
$this->assertIsArray($array1);
$this->assertIsArray($array2);
$this->assertIsArray($array3);
$this->assertIsArray($collection->toArray());
// 以下 Assertion 將會不通過測試
$this->assertIsArray($collection);
}
特別注意的是,當你想判定的對象可能是 Collection
時,直接代入 assertIsArray()
將導致判定不通過。
函數簽名:assertIsInt($actual[, $message = ''])
函數說明: 此函數可用來判斷第1個參數是否為 Int
型態。
實作範例:
/**
* Example for assertIsInt()
* @return void
*/
public function testAssertIsInt()
{
$int1 = 0;
$int2 = 1;
$float1 = 0.0;
$float2 = 1.0;
$string1 = '0';
$string2 = '1';
// 以下各 Assertion 皆會通過測試
$this->assertIsInt($int1);
$this->assertIsInt($int2);
// 以下 Assertion 將會不通過測試
$this->assertIsInt($float1);
$this->assertIsInt($float2);
$this->assertIsInt($string1);
$this->assertIsInt($string2);
}
函數簽名:assertIsFloat($actual[, $message = ''])
函數說明: 此函數可用來判斷第1個參數是否為 Float
型態。
實作範例:
/**
* Example for assertIsFloat()
* @return void
*/
public function testAssertIsFloat()
{
$float1 = 0.0;
$float2 = 1.0;
$float3 = -1.0;
// 以下各 Assertion 皆會通過測試
$this->assertIsInt($float1);
$this->assertIsInt($float2);
$this->assertIsInt($float3);
}
以上是幾個通用型 Assertion 函數,有興趣的讀者,可參考範例練習看看。
明天來介紹 Cookie、Session、HTTP 相關的 Assertion 函數。